package main

import (
	"flag"
	"golearn/src/server"
)

func main() {

	//准备好必要的参数
	var host = flag.String("server-host", "0.0.0.0", "server host")

	var port = flag.Int("server-port", 8080, "binding port")

	//构建出server对象
	server := MyServer{}
	server.init(*host, *port)
	server.start()
}

type Server interface {
	init(host string, port int, timeout int)

	//应该返回一个服务器上下文对象，包含了服务器的各种当前状态
	start()

	//关闭服务，释放资源
	shutdown()
}

// Event 事件类型的构造对象，事件可以包含很多情况，如遇见异常，请求超时等
type Event struct {
	name    EventEnum
	message string
}

type MyServer struct {
	Host          string
	Port          int
	serverRuntime ServerRuntime
}

//定义运行的几个枚举状态值
type RunTimeStatusEnum string

const (
	//运行中
	RUNNING RunTimeStatusEnum = "running"
	//1分钟内是否有出现错误
	MIN_HAS_ERROR RunTimeStatusEnum = "error"
	//未启动
	STOP RunTimeStatusEnum = "stop"
)

type EventEnum string

const (
	//异常事件名称
	EXCEPT   EventEnum = "exception"
	TIME_OUT EventEnum = "timeout"
)

//server的运行对象
type ServerRuntime struct {
	//当前的运行的状态
	status RunTimeStatusEnum
	//当前使用的线程数
	usingThread int
	//负载情况
	load string
	//运行时产生的过的事件,保存最近10个发生的事件
	events [10]Event
}

func (myServer *MyServer) init(host string, port int) {
	myServer.Host = host
	myServer.Port = port
	//其他什么需要启动的参数
}

func (myServer *MyServer) start() {
	//构造TCP socket 相关对象
	server.RunTcpServer(myServer.Host, myServer.Port)
	//构造业务处理对象
	//组合关联对象
	//启动
	//返回server状态对象
}

func (myServer *MyServer) shutdown() {

}
